﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using YKhoa_Lib.BLL;

namespace ToaThuoc_PAK.Handler.ChiDinh
{
    /// <summary>
    /// Summary description for XML_LuuPhieuChiDinh
    /// </summary>
    public class XML_LuuPhieuChiDinh : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            string MaBN = Factory.emptyNull(context.Request.QueryString["MaBN"]);
            string MaNV = context.Session["mand"].ToString();
            string MaDotKham = Factory.emptyNull(context.Request.QueryString["MaDotKham"]);
            string MaPhieu = Factory.emptyNull(context.Request.QueryString["MaPhieu"]);
            string MaPhieuKham = Factory.emptyNull(context.Request.QueryString["MaPhieuKham"]);
            string MaKhoa = Factory.emptyNull(context.Request.QueryString["MaKhoa"]);
            string MaDV = Factory.emptyNull(context.Request.QueryString["MaDV"]);
            string TenDV = Factory.emptyNull(context.Request.QueryString["TenDV"]);
            string SoLuong = Factory.emptyNull(context.Request.QueryString["SoLuong"]);
            string DonGia = Factory.emptyNull(context.Request.QueryString["DonGia"]);
            string ThanhTien = Factory.emptyNull(context.Request.QueryString["ThanhTien"]);
            string TongTien = Factory.emptyNull(context.Request.QueryString["TongTien"]);
            string BaoHiemChi = Factory.emptyNull(context.Request.QueryString["BaoHiemChi"]);
            string GhiChu = Factory.emptyNull(context.Request.QueryString["GhiChu"]);
            string NoiThucHien = Factory.emptyNull(context.Request.QueryString["NoiThucHien"]);
            string DoiTuong = Factory.emptyNull(context.Request.QueryString["DoiTuong"]);
            string BSChiDinh = Factory.emptyNull(context.Request.QueryString["BSChiDinh"]);
            string UuTien = Factory.emptyNull(context.Request.QueryString["UuTien"]);
            string NoiChiDinh = Factory.emptyNull(context.Request.QueryString["NoiChiDinh"]);
            string MaNoiChiDinh = Factory.emptyNull(context.Request.QueryString["MaNoiChiDinh"]);
            bool IsLuuMoi = MaPhieu == "" ? true : false;
            string xmlReturn = "<Root> \n";
            So_ChiDinh SoCD = new So_ChiDinh();     
            SoCD.MaPhieu = MaPhieu;
            SoCD.MaBN = MaBN;
            SoCD.MaNV = context.Session["mand"].ToString();
            SoCD.MaDotKham = MaDotKham;            
            SoCD.MaPhieuKham = MaPhieuKham;
            SoCD.Ngay = DateTime.Now;
            SoCD.NguoiChiDinh = BSChiDinh;
            SoCD.TongTien = TongTien == "" ? 0 : double.Parse(TongTien);
            SoCD.NoiChiDinh = MaNoiChiDinh;
            int nDoiTuong = 0;
            switch(DoiTuong)
            {
                case "BHYT":
                    nDoiTuong = 1;
                    break;
                case "DV":
                    nDoiTuong = 2;
                    break;
            }
            SoCD.DoiTuong = nDoiTuong;    
            if(MaDV != "")
            {
                MaDV = MaDV.TrimEnd('|', ' ');
                TenDV = TenDV.TrimEnd('|', ' ');
                SoLuong = SoLuong.TrimEnd('|', ' ');
                DonGia = DonGia.TrimEnd('|', ' ');
                ThanhTien = ThanhTien.TrimEnd('|', ' ');
                BaoHiemChi = BaoHiemChi.TrimEnd('|', ' ');
                GhiChu = GhiChu.TrimEnd('|', ' ');
                NoiThucHien = NoiThucHien.TrimEnd('|', ' ');
                MaKhoa = MaKhoa.TrimEnd('|', ' ');
                string[] MaDVs = MaDV.Split('|');
                string[] TenDVs = TenDV.Split('|');
                string[] SoLuongs = SoLuong.Split('|');
                string[] DonGias = DonGia.Split('|');
                string[] ThanhTiens = ThanhTien.Split('|');
                string[] BaoHiemChis = BaoHiemChi.Split('|');
                string[] GhiChus = GhiChu.Split('|');
                string[] MaKhoas = MaKhoa.Split('|');
                //string[] NoiThucHiens = NoiThucHien.Split('|');
                ChiTiet_ChiDinh newCTCD = null;
                for(int i = 0 ; i<MaDVs.Length;i++)
                {
                    newCTCD = new ChiTiet_ChiDinh();
                    newCTCD.MaDV = MaDVs[i];
                    newCTCD.TenDichVu = TenDVs[i];
                    newCTCD.SoLuong = SoLuongs[i] != "" ? int.Parse(SoLuongs[i]) : 1;
                    newCTCD.DonGia = DonGias[i] != "" ? double.Parse(DonGias[i]) : 0;
                    newCTCD.ThanhTien = ThanhTiens[i] != "" ? double.Parse(ThanhTiens[i]) : 0;
                    newCTCD.GhiChu = GhiChus[i];
                    newCTCD.MaKhoa = MaKhoas[i];
                    newCTCD.BH_KhongChi = BaoHiemChis[i] == "" ? 0 : double.Parse(BaoHiemChis[i]);
                    SoCD.ChiTietChiDinhs.Add(newCTCD);
                }
            }
            //kiểm tra đợt khám
            bool DKKetThuc = SoCD.KiemTraMaDotKham();
            if(DKKetThuc)
            {
                xmlReturn += "<Message Text='Bệnh nhân này đã Kết thúc đợt khám. Không thể thay đổi dữ liệu!'></Message>";
            }
            else
            {
                if (!IsLuuMoi) //cập nhật
                {
                    //kiểm tra xem phiếu đã được sử dụng chưa
                    bool IsSuDung = SoCD.KiemTraSuDung();
                    SoCD.DaSuDung = IsSuDung;
                    if (IsSuDung)
                    {
                        xmlReturn += "<Message Text='Phiếu này đã sử dụng. Không lưu thêm được. Hãy tạo phiếu mới!'></Message>";
                    }
                    else //cập nhật lại sổ chỉ định
                    {
                        bool rs = SoCD.CapNhatChiDinh();
                        if (rs)
                            xmlReturn += "<Message Text='Đã cập nhật lại phiếu chỉ định "+ MaPhieu +"!'></Message>";
                        else
                            xmlReturn += "<Message Text='Tạm thời không thể cập nhật được!'></Message>";
                    }
                }
                else //lưu mới sổ chỉ định
                {
                    SoCD.DaSuDung = false;
                    if (UuTien == "" || UuTien == "false") //type of UuTien is smallint
                        SoCD.UuTien = 0;
                    else
                        SoCD.UuTien = 1;
                   bool rs = SoCD.LuuChiDinh();
                    if(rs)
                        xmlReturn += "<Message Text='Đã lưu phiếu chỉ định vào hệ thống!'></Message>";
                    else
                        xmlReturn += "<Message Text='Tạm thời không thể lưu được!'></Message>";
                }
            }
            xmlReturn += "</Root>";
            context.Response.ContentType = "text/xml";
            context.Response.Write(xmlReturn);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}